package cn.edu.flying_birds;

import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * @author Li.Ding.yin
 * @create 2021年06月25日18:06-星期五
 * @role 小鸟类
 */
public class Bird {

    //定义小鸟的x，y坐标
    public int x;
    public int y;
    //定义小鸟的宽度和高度
    public int width;
    public int height;
    //定义小鸟的图片
    public BufferedImage img;
    //定义小鸟图片组
    public BufferedImage[] imgs = new BufferedImage[8];
    //定义小鸟的初始速度
    private double v0;
    //定义小鸟上飞的时间
    private double t;
    //每次上飞的距离
    private double s;
    //加速度
    private double g;

    //无参构造
    public Bird() {
        try {
            init();
        } catch (IOException e) {
            System.out.println("初始化小鸟失败！");
            e.printStackTrace();
        }
    }

    //初始化小鸟属性方法
    private void init() throws IOException {
        img = ImgUtils.getImg("../img/0.png");
        width = img.getWidth() / 2;
        height = img.getHeight() / 2;
        x = 120;
        y = 200;
        //初始化图片组
        for (int i = 0; i < imgs.length; i++) {
            imgs[i] = ImgUtils.getImg("../img/" + i + ".png");
        }
        //定义自由落体初始属性
        v0 = 3;
        s = 2;
        t = 0.2;
        g = 9.8;
    }

    /**
     * 判断小鸟与柱子碰撞的方法
     *
     * @param column 柱子对象
     * @return 撞到了返回true，反之false
     */
    public boolean columnCrash(Column column) {
        //判断小鸟是否与柱子的左侧相撞
        boolean left = (x + width < column.x);
        //判断小鸟是否与柱子右侧相撞
        boolean right = (column.x + column.width < x);
        //判断小鸟是否与柱子空隙上边缘相撞
        boolean up = (y > (column.height / 2 - column.gap / 2 + column.y));
        //判断小鸟是否与柱子空隙下边缘相撞
        boolean down = ((y + height) < (column.height / 2 - column.gap / 2 + column.y + column.gap));

        if (left || right || (up && down)) {//没有撞到柱子
            return false;
        }
        //撞到柱子
        return true;
    }

    // 判断小鸟与地面碰撞的方法
    public boolean groundCrash() {
        if ((y + height) >= new Ground().y) {// 撞到了地面
            return true;
        }
        // 没有撞到
        return false;
    }

    // 小鸟往上飞的方法
    public void moveUp() {
        //更改小鸟向上的初速度
        v0 = 20;
    }

    //小鸟往下落的方法
    public void moveDown() {
        //计算小鸟上飞的距离
        s = v0 * t;
        //计算小鸟到达最高点的y坐标
        y = (int) (y - s);
        //计算小鸟到达最高点的速度
        //此时，将最高点的速度作为下落的初速度
        v0 = v0 - g * t;
    }

    //定义计数变量
    int number = 0;

    //让小鸟的翅膀煽动
    public void flying() {
        //判断number是否大于imgs.length
        if (number >= imgs.length) {
            number = 0;
        }
        img = imgs[number];
        number++;
    }

}
